package modelos.daos;

import controladores.ManejadorBaseDatos;
import modelos.pojos.ServiciosAdicionales;
import java.sql.*;
import java.util.LinkedList;
import java.util.List;

public class ServiciosAdicionalesDAO {

    private static Connection con;
    public static List<ServiciosAdicionales> resultados;

    public static void crear(ServiciosAdicionales servicioAdicional) throws SQLException, Exception {

        ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con = mbd.getConexion();

        if (con == null) {
            throw new SQLException(" no hay conexion ");
        }

        PreparedStatement pst = null;

        try {
            pst = con.prepareStatement("Insert Into ServiciosAdicionales values(?,?,?,?,?,?)");
            pst.setString(1, null);
            pst.setString(2, servicioAdicional.getCodigo());
            pst.setString(3, servicioAdicional.getNombre());
            pst.setString(4, servicioAdicional.getDescripcion());
            pst.setDouble(5, servicioAdicional.getValor());
            pst.setString(6, servicioAdicional.getEstado() + "");
            pst.executeUpdate();


        } finally {

            if (pst != null) {
                pst.close();
            }
        }
    }

    public static ServiciosAdicionales consultar(String codigo) throws SQLException {

        ResultSet rs = null;
        PreparedStatement pst = null;
        ServiciosAdicionales ser = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("select * from ServiciosAdicionales where codigo = ?");
            pst.setString(1, codigo);
            rs = pst.executeQuery();

            while (rs.next()) {
                ser = ServiciosAdicionales.cargarDatos(rs);

            }
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }
            return ser;
        }
    }

    public static List listar(String nombre) throws SQLException {

        ResultSet rs = null;
        PreparedStatement pst = null;
        resultados = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("select * from ServiciosAdicionales where nombre like ?");
            pst.setString(1, "%" + nombre + "%");
            rs = pst.executeQuery();

            while (rs.next()) {
                if (resultados == null) {
                    resultados = new LinkedList<ServiciosAdicionales>();
                }
                resultados.add(ServiciosAdicionales.cargarDatos(rs));

            }
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }
            return resultados;
        }
    }

    public static void actualizar(ServiciosAdicionales servicioAdicional) throws SQLException, Exception {
        int id = servicioAdicional.getId();
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();

            pst = con.prepareStatement("Update ServiciosAdicionales Set nombre=?,valor=?,estado=?,descripcion=? Where id=?");
            pst.setString(1, servicioAdicional.getNombre());
            pst.setDouble(2, servicioAdicional.getValor());
            pst.setString(3, servicioAdicional.getEstado() + "");
            pst.setString(4, servicioAdicional.getDescripcion());
            pst.setInt(5, id);
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }

    public static void eliminar(String codigo) throws SQLException, Exception {
        if (consultar(codigo) == null) {
            throw new SQLException("");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("delete from ServiciosAdicionales where codigo = ?");
            pst.setString(1, codigo);
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }
}
